/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package invsys.Controladores;
import invsys.Modelo.DetalleCredito;
import invsys.Modelo.Venta;
import invsys.Utilidades.ManejadorBaseDatos;
import invsys.Utilidades.ValidarorVistas;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DecimalFormat;
import java.util.LinkedList;
import java.util.List;
/**
 *
 * @author dell
 */
public class ControlDetalleCredito {
           public static DetalleCredito load(ResultSet rs) throws SQLException{
        DetalleCredito c=new DetalleCredito();
        c.setFactura(ControlVenta.BuscarVenta(rs.getString(1)));
        if(ControlVenta.BuscarVenta(rs.getString(1))==null){
       Venta v=new Venta();
       v.setNumero(rs.getString(1));
       c.setFactura(v);
        }
        c.setCredito(ControlCredito.BuscarCredito(rs.getString(2)));
        c.setMonto(rs.getDouble(3));
        c.setSaldo(rs.getDouble(4));
        c.setMovimiento(rs.getString(5));
        c.setFecha(rs.getString(6));
        return c;
    }   
            static ValidarorVistas vistas=new ValidarorVistas();
  private static List DetalleCreditos;
  public static Connection con;
  public static void RegistrarDetalleCredito(DetalleCredito c) throws SQLException, IOException, Exception {
        ManejadorBaseDatos mbd = ManejadorBaseDatos.getInstancia();
        mbd.conectar();
        con = mbd.getConexion();
        if (con == null) {
            throw new SQLException(" no hay conexion ");
        }
        PreparedStatement pst = null;

        try {

            pst = con.prepareStatement("Insert Into detallecredito values(?,?,?,?,?,?)");
            pst.setString(1, c.getFactura().getNumero());
            pst.setString(2, c.getCredito().getId());
            pst.setDouble(3, c.getMonto());
            pst.setDouble(4, c.getSaldo());
            pst.setString(5, c.getMovimiento());
            pst.setString(6, c.getFecha());
            pst.executeUpdate();
                  
           
        } finally {
            if (pst != null) {
                pst.close();
            }
        }
    }
  public static DetalleCredito BuscarDetalleCredito(String num) throws SQLException{
            if (num == null) {
          throw new SQLException("No hay elemento clave de la clase usuario");
        }
         ResultSet rs = null;
         PreparedStatement pst = null;
         DetalleCredito detallecredito= null;
     try {
         ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
         mbd.conectar();
         con=mbd.getConexion();
         pst = con.prepareStatement("SELECT dc.* FROM detallecredito dc,creditos c WHERE c.id=dc.credito and c.id=?");
         pst.setString(1, num.trim());

         rs = pst.executeQuery();
         while(rs.next()) {
             detallecredito = load(rs);
         }
    } finally {
         if (rs != null) {
            rs.close();
         }
         if (pst != null) {
           pst.close();
         }
          return detallecredito;
    }
    }
  public static DetalleCredito BuscarDetalleCreditofecha(String fecha) throws SQLException{
            if (fecha == null) {
          throw new SQLException("No hay elemento clave de la clase usuarios");
        }
         ResultSet rs = null;
         PreparedStatement pst = null;
         DetalleCredito detallecredito = null;
     try {
         ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
         mbd.conectar();
         con=mbd.getConexion();
         pst = con.prepareStatement("SELECT * FROM detallecredito  WHERE  fecha=?");
         pst.setString(1, fecha.trim());

         rs = pst.executeQuery();
         while(rs.next()) {
             detallecredito = load(rs);
         }
    } finally {
         if (rs != null) {
            rs.close();
         }
         if (pst != null) {
           pst.close();
         }
          return detallecredito;
    }
    }
  public static void ModificarDetalleCredito(DetalleCredito c, String ide) throws SQLException, Exception {
        if (BuscarDetalleCredito(ide) == null) {
            throw new SQLException("usuario no registrado ");
        }
        PreparedStatement pst = null;

        try {
            ManejadorBaseDatos mbd = ManejadorBaseDatos.getInstancia();
            mbd.conectar();
            con = mbd.getConexion();
            pst = con.prepareStatement("UPDATE detallecredito d,ventas v "
                    + "SET d.factura=?,d.credito=?,d.monto=?,d.saldo=?,d.movimiento=?"
                    + " WHERE v.fecha=?"
                    + " AND v.num=d.factura");	
            pst.setString(1, c.getFactura().getNumero());
            pst.setString(2, c.getCredito().getId());
            pst.setDouble(3, c.getMonto());
            pst.setDouble(4, c.getSaldo());
            pst.setString(5, c.getMovimiento());
            pst.setString(6, c.getFactura().getFecha());
            pst.executeUpdate();

        } finally {
            if (pst != null) {
                pst.close();
            }
        }

    }
  public static void listarDetalleCredito() throws SQLException, Exception {
     ResultSet rs = null;
     PreparedStatement pst = null;
     DetalleCreditos = new LinkedList();
     try {
         ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
         mbd.conectar();
         con=mbd.getConexion();
        pst = con.prepareStatement("select * from compras ");
        rs = pst.executeQuery();
        while(rs.next()) {
           DetalleCreditos.add(load(rs));
        }
    } finally {
        if (rs != null) {
           rs.close();
       }
        if (pst != null) {
          pst.close();
       }
}
}
  public static boolean ExisteDetalleCredito(int ide){
        boolean existe=false;

        return existe;
    }
  public static void EliminarDetalleCredito(String fecha) throws SQLException, Exception {
        if (BuscarDetalleCreditofecha(fecha) == null) {
            throw new SQLException("No hay elemento clave de la clase Usuario");
        }
        PreparedStatement pst = null;

        try {
            ManejadorBaseDatos mbd = ManejadorBaseDatos.getInstancia();
            mbd.conectar();
            con = mbd.getConexion();
            pst = con.prepareStatement("delete from detallecredito dc,ventas v where v.num=dc.factura and v.fecha=?");
            pst.setString(1, fecha.trim());
            pst.executeUpdate();

        } finally {
            if (pst != null) {
                pst.close();
            }
        }

    }
  public static void listarDetalleCredito1(String sql) throws SQLException, Exception {
     ResultSet rs = null;
     PreparedStatement pst = null;
     DetalleCreditos = new LinkedList();
     try {
         ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
         mbd.conectar();
         con=mbd.getConexion();
        pst = con.prepareStatement(sql);
        rs = pst.executeQuery();
        while(rs.next()) {
           DetalleCreditos.add(load(rs));
        }
    } finally {
        if (rs != null) {
           rs.close();
       }
        if (pst != null) {
          pst.close();
       }
}
}
  public static double SaldoCreditoSuma(String credito) throws SQLException, Exception {
     ResultSet rs = null;
     PreparedStatement pst = null;
     double ultimoc=0;
     try {
         ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
         mbd.conectar();
         con=mbd.getConexion();
        pst = con.prepareStatement("SELECT SUM(monto) AS suma FROM detallecredito WHERE credito='"+credito+"'");
        rs = pst.executeQuery();
        while(rs.next()) {
           ultimoc=rs.getDouble("suma");
        }
    } finally {
        if (rs != null) {
           rs.close();
       }
        if (pst != null) {
          pst.close();
       }
    }
    return ultimoc;
}
  public static String ultimoDetalleCredito(String credito) throws Exception {
     ResultSet rs = null;
     PreparedStatement pst = null;
     String ultimoc="";
     DecimalFormat sd=new DecimalFormat("000");
     try {
         ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
         mbd.conectar();
         con=mbd.getConexion();
        pst = con.prepareStatement("SELECT COUNT(factura)+1 AS ultimo FROM detallecredito WHERE credito='"+credito+"'");
        rs = pst.executeQuery();
        while(rs.next()) {           
           String ultimo=rs.getString("ultimo");
           int nro=Integer.parseInt(ultimo);
           ultimoc="CRD"+vistas.Fechacodigio()+sd.format(nro);
           
        }
    } finally {
        if (rs != null) {
           rs.close();
       }
        if (pst != null) {
          pst.close();
       }
    }
    return ultimoc;
}
  public static void setDetalleCredito(List aDetalleCredito) {
        DetalleCreditos = aDetalleCredito;
    }
  public static List getDetalleCredito() {
        return DetalleCreditos;
    }
}
